package controller

import (
	"github.com/gin-gonic/gin"
	"go-0650-blog-grom/models"
	"go-0650-blog-grom/service"
	"go.uber.org/zap"
)

type PostController struct {
}

/**
 * @Author SSWANG
 * @Description //TODO 创建帖子
 * @Date 15:29 2022/10/28
 **/
func (con PostController) Publish(c *gin.Context) {

	// 1、获取参数及校验参数
	var post models.Post
	if err := c.ShouldBindJSON(&post); err != nil { // validator --> binding tag
		zap.L().Debug("c.ShouldBindJSON(post) err", zap.Any("err", err))
		zap.L().Error("create post with invalid parm")
		ResponseErrorWithMsg(c, CodeInvalidParams, err.Error())
		return
	}

	// 自动获取作者ID，当前请求的 UserID (从 token 取到当前发请求的用户ID)
	userID, err := getCurrentUserID(c)
	if err != nil {
		zap.L().Error("GetCurrentUserID() failed", zap.Error(err))
		ResponseError(c, CodeNotLogin)
		return
	}
	post.AuthorId = userID

	// 2、创建帖子
	err = service.PostService{}.CreatePost(&post)
	if err != nil {
		zap.L().Error("logic.CreatePost failed", zap.Error(err))
		ResponseError(c, CodeServerBusy)
		return
	}

	// 3、返回响应
	ResponseSuccess(c, nil)
}

/**
 * @Author SSWANG
 * @Description //TODO 分页获取帖子列表
 * @Date 19:42 2022/10/28
 **/
func (con PostController) PostListHandler(c *gin.Context) {
	// 获取分页参数
	page, size := getPageInfo(c)
	// 获取数据
	data, err := service.PostService{}.GetPostList(page, size)
	if err != nil {
		ResponseError(c, CodeServerBusy)
		return
	}
	ResponseSuccess(c, data)
}
